#include <iostream>

#include "bglProgram.h"
#include "bglWidget.h"

class BaseWidget : public BGLWidget
{
private:
	unsigned int m_VBO; //顶点缓冲区对象
	unsigned int m_VAO; //顶点数组对象

	BGLProgram m_program;

public:
	BaseWidget() : BGLWidget()
	{
		
	}

	~BaseWidget()
	{

	}

	virtual void Init() 
	{
		float vertices[] = {
			-0.5f, -0.5f, 0.0f,
			0.5f, -0.5f, 0.0f,
			0.0f,  0.5f, 0.0f
		};

		// float vertices[] = {
		// 	// 第一个三角形
		// 	0.5f, 0.5f, 0.0f,   // 右上角
		// 	0.5f, -0.5f, 0.0f,  // 右下角
		// 	-0.5f, 0.5f, 0.0f,  // 左上角
		// 	// 第二个三角形
		// 	0.5f, -0.5f, 0.0f,  // 右下角
		// 	-0.5f, -0.5f, 0.0f, // 左下角
		// 	-0.5f, 0.5f, 0.0f   // 左上角
		// };

		glGenVertexArrays(1, &m_VAO); //创建顶点数组对象
		glBindVertexArray(m_VAO); //绑定顶点数组

		glGenBuffers(1, &m_VBO);  //创建顶点缓冲区
		glBindBuffer(GL_ARRAY_BUFFER, m_VBO); //绑定顶点缓冲区
		glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); //GL_STATIC_DRAW:数据不会或几乎不会改变。
		
		//设置VBO的属性
		glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
		glEnableVertexAttribArray(0); //启用0号顶点属性

		m_program.createProgramFromFile("./data/shaders/03_trangle/vert.glsl", "./data/shaders/03_trangle/frag.glsl"); //创建shader program
	}

	virtual void Render()
	{
		m_program.begin();

		glBindVertexArray(m_VAO);
		glDrawArrays(GL_TRIANGLES, 0, 3);
		//glDrawArrays(GL_TRIANGLES, 0, 6);

		m_program.end();
	}

	void FramebufferSizeCallback(GLFWwindow* window, int width, int height)
	{
		if(width != 0 && height != 0)
		{
			glViewport(0, 0, width, height);
		}
	}

}; 

int main() {
	
	BaseWidget widget;
	widget.Run();

	return 0;
}